from fastapi import APIRouter
from fastapi.routing import APIRoute
from pydantic import BaseModel

router = APIRouter()


@router.get("/items", operation_id="operator_get_items_operation_id")
async def read_items():
    return [{"id":1,"name":"item1"},{"id":2,"name":"item2"}]


@router.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"id":item_id,"name":"item"}

class Item(BaseModel):
    name: str
    description: str | None = None
    price: float
    tax: float | None = None
    tags: set[str] = set()

@router.post("/items", response_model=Item,summary="创建一个item")
async def create_item(item: Item):
    """
    创建一个item
    - **name**: 每一个item都有一个名称
    - **description**: 一个关于item的长描述
    - **price**: 必须录入
    - **tax**: 如果这个item是无tax的可以不用传递
    - **tags**: 关于这个item的一组标签，是set类型的
    \f
    :param item: 用户输入请求体参数
    :return: item
    """
    return item


def use_route_names_as_operation_id(router: APIRouter):
    for route in router.routes:
        if isinstance(route, APIRoute):
            # 这里的route.name是路径操作函数名称
            route.operation_id = route.name

use_route_names_as_operation_id(router)